package main

import (
	"database/sql"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

//2.1定义模型
//type User struct {
//	ID   int64
//	Name string `gorm:"default:'小王子'"`
//	Age  int64
//}

//2.2使用指针方式实现零值存入数据库
//type User struct {
//	ID   int64
//	Name *string `gorm:"default:'小王子'"`
//	Age  int64
//}

//2.3使用Scanner/Valuer接口方式实现零值存入数据库
type User struct {
	ID   int64
	Name sql.NullString `gorm:"default:'小王子'"`
	Age  int64
}

func main() {
	//1.连接mysql数据库
	db, err := gorm.Open("mysql", "root:123456@(127.0.0.1)/db1?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	//3.把模型与数据库中的表对应起来
	db.AutoMigrate(&User{})

	//4.1创建 插入数据
	//u := User{Name: "qimi", Age: 30}
	//fmt.Println(db.NewRecord(&u)) //判断主键是否为空 true
	//db.Create(&u)                 //在数据库中创建了一条记录
	//fmt.Println(db.NewRecord(&u)) //判断主键是否为空 false
	//
	//u1 := User{Age: 200} //Name使用default默认值
	//db.Create(&u1)

	//u2 := User{Name: "", Age: 40} //Name使用default默认值
	//db.Debug().Create(&u2)

	//4.2以下配合使用指针方式实现零值存入数据库
	//u1 := User{Age: 200}
	//db.Create(&u1)
	//
	//u2 := User{Name:new(string),Age: 200}
	//db.Create(&u2)

	//4.3下配合使用Scanner/Valuer接口方式实现零值存入数据库
	u1 := User{Age: 88}
	db.Create(&u1)

	u2 := User{Name:sql.NullString{String: "",Valid: true},Age: 200}
	db.Debug().Create(&u2)

}
